package com.fadis.data.set;

import java.util.ArrayList;
import java.util.HashSet;

/**
 * 给集合赋予随机访问能力，主要是为了满足srandmember的需要
 * 因为HashSet的元素无序只是插入无序，但顺序其实还是固定的，每次遍历的顺序都是一样的，无法实现随机
 *
 * 问题就是remove操作变成O(N)的了，因为要去list里删除
 * -- 关键还是没法访问HashSet的底层数组，如果能的话就没问题了
 */
public class RandomAccessHashSet<E> extends HashSet<E> {

    private ArrayList<E> list = new ArrayList<E>();

    public E get(int index) {
        return list.get(index);
    }

    @Override
    public boolean add(E o) {
        if (super.add(o)) {
            list.add(o);
            return true;
        } else
            return false;
    }

    @Override
    public boolean remove(Object o) {
        if (super.remove(o)) {
            list.remove(o);
            return true;
        } else
            return false;
    }
}
